<?php
namespace app\job;

use app\api\controller\v1\Clue as ClueModel;
use other\SmsMuSend;
use other\SmsWYSend;
use think\Db;
use think\Exception;
use think\queue\Job;

//php think queue:listen --queue SubCluePush
class SubCluePush{
    /**
     * fire方法是消息队列默认调用的方法
     * @param Job            $job      当前的任务对象
     * @param array|mixed    $data     发布任务时自定义的数据
     */
    public function fire(Job $job,$data){
        // 如有必要,可以根据业务需求和数据库中的最新数据,判断该任务是否仍有必要执行.
        $isJobStillNeedToBeDone = $this->checkDatabaseToSeeIfJobNeedToBeDone($data);
        if(!$isJobStillNeedToBeDone){
            $job->delete();
            return;
        }

        $isJobDone = $this->doHelloJob($data);

        if ($isJobDone) {
            //如果任务执行成功， 记得删除任务
            $job->delete();
        }else{
            if ($job->attempts() > 3) {
                //通过这个方法可以检查这个任务已经重试了几次了
                $job->delete();
                // 也可以重新发布这个任务
                //$job->release(2); //$delay为延迟时间，表示该任务延迟2秒后再执行
            }
        }
    }


    /**
     * 有些消息在到达消费者时,可能已经不再需要执行了
     * @param array|mixed    $data     发布任务时自定义的数据
     * @return boolean                 任务执行的结果
     */
    private function checkDatabaseToSeeIfJobNeedToBeDone($data){
        return true;
    }

    /**
     * 根据消息中的数据进行实际的业务处理
     * @param array|mixed    $data     发布任务时自定义的数据
     * @return boolean                 任务执行的结果
     */
    private function doHelloJob($data) {
        try {
            $clue_info = Db::name('clue_log')->where('clue_id',$data['clue_id'])->find();
            //子商户
            $mer=model('MerchantSub')->where('mer_id',$data['mer_id'])->where('status',1)->order('last_push_time asc')->find();
            if(!empty($mer)){
                unset($clue_info['sub_status']);
                $clue_info['mer_id_sub']=$mer['id'];
                model('ClueLogSubMer')->allowField(true)->save($clue_info);
                Db::name('clue_log')->where('id',$clue_info['id'])->update(['sub_status'=>1]);
                Db::name('merchant_sub')->where('id',$mer['id'])->update(['last_push_time'=>time()]);

                $mobiles = $mer['phone'];
                $content='【'.config('database')['host_sms_name']."】提醒你有个线索查看！";
                SmsMuSend::send($mobiles,$content);
            }
            echo json_encode($data,JSON_UNESCAPED_UNICODE);
            return true;
        }catch (Exception $e){
            $errData=[
                'code'=>$e->getCode(),
                'msg'=>$e->getMessage(),
                'flie'=>$e->getFile(),
                'line'=>$e->getLine(),
            ];
            echo json_encode($errData,JSON_UNESCAPED_UNICODE);
            trace($errData,'error');
            return true;
        }
    }

}